上篇提到OO的優點之一是較為直觀,例如透過類別Person定義一個me。至於Person()和me之間的關係,用以下比喻(其實是事實),初學者可能更易理解:
Day 1範例程式Python版中的me = Person(...)
,如果把Person想成double(type),把me想成變數height,這樣不就跟C語言版中的double height;
很相似?差別在double是程式語言幫我們準備好的型別,而Person則屬於自訂型別,我們自己必須告訴程式語言:這個型別有哪些「內容」、有哪些「功能」。這個告知程式語言「我們的自訂型別長怎樣」的工作,實務上就是定義(註1)類別(class)。
定義好Person類別後,就可以像內定型別(int, string...)一般使用,只是語法不同吧了。語法相不相同是小事,語意或語義才重要。
換另一個說法:類別可視為「模板」,而me是利用Person這個模板造出來的物件(object)。
上面「me是利用Person這個模板造出來的物件(object)」這句話,另一個幾乎等價的說法為:me是由Person類別實作出來的實例(instance)。
在OO世界中,object和instance這兩個terms,意義非常接近。有人這樣區分兩者的細微差別:
不過筆者認為,如果不是做學術研究,似乎沒有太大必要刻意區分object和instance,將兩者視為一樣即可。本系統文章亦不作區別,兩者視為同義,常object和instance混用。
在OO中,class內部會有變數和函數(詳後述),class內的變數通常稱為attribute(屬性),函數則稱method(方法)。
以下是OO和Procedural這兩種較普及paradigms一些術語的比較表:
OO | Procedural |
---|
class | module, struct
object, instance | record
attribute | variable
method | function
method passing(invoking) | function call
bottom up approach | top down approach
OO理論的整體介紹到此為止,下面要依序解說OO的三大(或曰四大)鼎足:
註1: 這裡定義(define)和宣告(declare)同義,不予區分。